
\chapter{Application android}

	\section{Généralités}

		Le logiciel client est prévu pour tourner sous android version 2.1 minimum (7\ieme{} version du SDK).
		Il a été testé sur un htc hero (android 2.1) et sur un motorola defy (android 2.2).

		Le tracé des courbes (voir figure \ref{patientplot}) utilise \verb+Androidplot-core-0.4.4-release.jar+
		qui se situe dans le dossier \verb+lib+.

		Quand on parle de synchronisation, c'est en fait à sens unique puisque le téléphone reçoit les données
		depuis le serveur mais n'ajoute pas de données dans la base du serveur.


	\section{Problèmes et notes}

		\begin{enumerate}

			\item Le programme android contient deux patients de test (David et Xavier) qui sont automatiquement
					générés. C'est la méthode \verb+insertDatas+ de la classe \verb+RetreiveData+ qu'il faut commenter
					pour ne plus re-générer ces données de test.

			\item La communication réseau lors de la synchronisation est un peu longue. Il semble que ce soit plus rapide
					via une box qu'en utilisant directement un ordinateur comme routeur. La longueur de la communication
					est sans doute liée au fait que le serveur envoi toute les données
					qui concerne le patient à synchroniser (et non juste les nouvelles données).
					C'est le programme android qui sélectionne les données à insérer dans sa propre base.
					En effet, nous n'avons pas pu transmettre les données présente dans le téléphone au serveur sans
					rencontrer d'erreurs.

		\end{enumerate}


	\section{Présentation de l'architecture}

		\subsection{Ressources}

			\subsubsection{Images}

				Les images utilisées par l'application se situent dans le dossier \verb+/res/drawable-ldpi/+.

			\subsubsection{Menus}

				\begin{description}
					\item[mainmenu] Le menu de l'écran d'accueil (voir figure \ref{menu}).
				\end{description}

			\subsubsection{Layouts}

				\begin{description}
					\item[alertidentify] La fenêtre de demande d'info au premier démarrage (\verb+MainScreen+), (voir figure \ref{demarrage}).
					\item[main] L'écran d'accueil (\verb+MainScreen+).
					\item[navigationlayout] Le layout générique qui sert à naviguer d'une liste à l'autre via un glissé vers la gauche ou vers la droite.
										Il est utilisé pour passer d'un patient à l'autre (\verb+SliceNavigator+).
					\item[patient\_details\_row] Une ligne dans l'écran qui permet de voir les détails d'un patient (voir figure \ref{patientdetail}).
					\item[patient\_row] Une ligne dans la liste des patients (voir figure \ref{patientlist}).
					\item[plot] L'écran qui permet de visualiser le tracé des relevés des capteurs (voir figure \ref{patientplot}).
				\end{description}

			\subsubsection{String}

				\begin{description}
					\item[app\_name] Le nom de l'application
					\item[about] Un petit texte qui sera affiché sur l'écran d'accueil de l'application.
				\end{description}


			\subsubsection{Préférences}

				Les éléments qui compose l'écran de préférence sont défini dans le fichier \verb+/xml/preferences.xml+.

				On a deux catégories :
				\begin{enumerate}
					\item {\bf Options de connexion : } Nom de connexion et mot de passe
					\item {\bf Configuration du serveur : } Adresse IP du serveur
				\end{enumerate}



		\subsection{Packages}

			\begin{description}

				\item[fr.android.core] Pas spécifique à cette TO, contient la classe \verb+SimpleGestureFilter+ qui permet de simplifier
									la gestion des événements de touché à l'écran.

				\item[fr.android.ui] Pas spécifique à cette TO, contient la classe \verb+SliceNavigator+ qui est un écran universelle avec
									la gestion du glissé vers la gauche et vers la droite.

				\item[to52.android.adapters] Ce package contient les adapters pour les listes.

					\begin{description}
						\item[CapteurDetailsAdapter] \`Ecran de visualisation des données capteurs (courbe).
						\item[PatientAdapter] Liste des patients.
						\item[PatientDetailsAdapter] \'Ecran avec le patient et la liste des capteurs qui lui sont attachés.
					\end{description}


				\item[to52.android.database] Ce package contient les données relative à la base de données.

					\begin{description}
						\item[Database] Structure de la base de données.
						\item[DatabaseModel] Une interface qui défini les opérations à implémenter pour effectuer les opérations dans la BDD.
						\item[DatabaseSimulator] Un simulateur de base de données pour le développement.
						\item[RetreiveData] Permet de récupérer les différentes données de la BDD du téléphone.
					\end{description}


				\item[to52.android.preferences] Contient la classe \verb+Preferences+ qui est l'activité de l'écran des préférences.

				\item[to52.android.screens] Contient les écrans de l'application.

					\begin{description}
						\item[MainScreen] \'Ecran d'accueil
						\item[PatientDetailsList] Liste des capteurs associés à un patient.
						\item[PatientList] Liste des patients
						\item[PlotView] Vue du tracé (courbe) des détails d'un patient.
					\end{description}


				\item[to52.android.services] Contient le service qui va communiquer avec l'application serveur, nous allons le détailler après.


			\end{description}



		\subsection{Service}

			Le service \verb+PullService+ s'occupe de gérer la communication avec le serveur. C'est dans celui-ci que sont défini le port à utiliser entre
			autres.

			La connexion ne s'établit que si elle est nécessaire (pour synchroniser les données).


		\subsection{Coopération swipe}

			{\it Note : } Le diagramme ci dessous explicite la liaison entre les classes pour les glissé vers la gauche ou la droite.

			Voici quelques notes qui peuvent être utiles pour comprendre le schéma :

			L'interface \verb+SimpleGestureListener+ redéfini simplement les actions qui nous intéresse :

			\lstset{language=java}
			\begin{lstlisting}
public static interface SimpleGestureListener {
	void onSwipe(int direction);
	void onDoubleTap();
}
			\end{lstlisting}

			L'idée est que la classe \verb+SliceNavigator+ est un écran générique de swipe. On y trouve en haut le bandeau avec un texte et deux boutons
			(pour aller vers la droite ou la gauche), et en dessous un \verb+Adapter+. Par exemple, pour \verb+PlotView+, on est dans un écran où on va
			pouvoir aller de gauche à droite et la liste utilisée est \verb+CapteurDetailsAdapter+.

			\begin{figure}
				\centering
				\includegraphics[width=10cm]{images/slice}
				\caption{Coopération entre les classes pour le glissé entre écrans}
			\end{figure}


	\newpage

	\section{Guide de mise en route}

		%Il faut bien entendu que le serveur soit lancé et qu'il soit accessible par le téléphone.

		Au premier démarrage, les informations concernant la connexion sont demandés :

		\begin{figure}[h!]
			\centering
			\includegraphics[width=6cm,angle=90]{images/demarrage}
			\caption{Demande d'informations au démarrage}
			\label{demarrage}
		\end{figure}


		On arrive ensuite sur l'écran d'accueil :

		\begin{figure}[h!]
			\centering
			\includegraphics[width=6cm,angle=90]{images/mainscreen}
			\caption{\'Ecran d'accueil}
			\label{mainscreen}
		\end{figure}

		On peut alors accéder au menu :

		\begin{figure}[h!]
			\centering
			\includegraphics[width=6cm]{images/menu}
			\caption{Menu de l'écran d'accueil}
			\label{menu}
		\end{figure}

		On notera que :
		\begin{enumerate}
			\item Le bouton préférences permet de fixer les préférences de l'application (login, password\ldots)
			\item Le bouton sync permet de synchroniser la base de données du téléphone avec le serveur
			\item Le bouton reset database est surtout utile pour le développement, il permet de vider la base de données
					et de la re-remplir avec des données de test.
		\end{enumerate}


		En cliquant sur le bouton \og{}Liste des patients\fg{}, on accède à la liste des patients :
		\begin{figure}[h!]
			\centering
			\includegraphics[width=6cm,angle=90]{images/patientlist}
			\caption{Liste des patients}
			\label{patientlist}
		\end{figure}

		En cliquant sur un patient, on accède à ses détails :
		\begin{figure}[h!]
			\centering
			\includegraphics[width=6cm,angle=90]{images/patientdetail}
			\caption{Détails d'un patient}
			\label{patientdetail}
		\end{figure}

		\`A ce niveau là, on peut naviguer entre les patient en glissant vers la gauche ou la droite.

		Enfin, en cliquant sur un capteur on obtient l'historique des relevés :
		\begin{figure}[h!]
			\centering
			\includegraphics[width=6cm,angle=90]{images/patientplot}
			\caption{Détails d'un capteur pour un patient}
			\label{patientplot}
		\end{figure}

		On peut là aussi naviguer d'un capteur à l'autre en glissant vers la gauche ou la droite.




